java如何正确使用如此多的CPU停止命令队列循环?
我有一个while循环,用于检查包含程序要执行的命令的arraylist是否为空。很明显,如果它不是空的,它会做一些事情,但是如果它现在是空的,我只有一个线程。为其他人睡眠(1000)。这使得任何与之交互的东西都变得相当迟钝。在添加新命令之前,有没有办法阻止它运行的线程?(它在自己的线程中运行,所以对我来说这似乎是最好的解决方案)或者有更好的解决方案吗
你可以在下面搜索框中键入要查询的问题!
我有一个while循环,用于检查包含程序要执行的命令的arraylist是否为空。很明显,如果它不是空的,它会做一些事情,但是如果它现在是空的,我只有一个线程。为其他人睡眠(1000)。这使得任何与之交互的东西都变得相当迟钝。在添加新命令之前,有没有办法阻止它运行的线程?(它在自己的线程中运行,所以对我来说这似乎是最好的解决方案)或者有更好的解决方案吗
# 1 楼答案
更好的解决方案是使用Executor服务。这结合了一个队列和一个线程池
# 2 楼答案
您可以使用
wait()
和notify()
让向列表中添加内容的线程通知消费者线程有需要读取的内容。然而,这需要适当的同步等但是解决问题的更好方法是使用} 是一个很好的类。当您希望在队列中存储有限数量的项时(或者} 。如果队列有限,那么
BlockingQueue
。根据定义,它们是同步类,当添加内容时,出列将被适当地阻止并唤醒。如果希望队列不受限制,那么^{LinkedBlockingQueue
将整数传递给构造函数),可以使用^{queue.add(...)
将在队列已满时阻塞# 3 楼答案
在命令中使用^{}
在上面的链接中有一个很好的例子说明了如何使用它